home *** CD-ROM | disk | FTP | other *** search
/ PC User 2003 December / Australian PC User - December 2003 (CD2).iso / software / apps / files / dwmx2k4.exe / Disk1 / data1.cab / Configuration_En / Objects / Common / Hyperlink.js < prev    next >
Encoding:
JavaScript  |  2003-09-05  |  6.5 KB  |  218 lines

  1. // Copyright 2001, 2002, 2003 Macromedia, Inc. All rights reserved
  2.  
  3. var helpDoc = MM.HELP_objHyperlink;
  4.  
  5. //---------------   GLOBAL CONSTANTS   ---------------
  6.  
  7. var DEFAULT_TARGETS = new Array("","_blank","_parent","_self","_top");
  8. var SCHEMES = new Array("http://","https://", "file://", "ftp://", "gopher://", "mailto://", "news://", "nntp://", "rlogin://", "telnet://", "tn3270://", "wais://");
  9.  
  10.  
  11. //---------------   GLOBAL VARIABLES   ---------------
  12.  
  13. var LIST_LINKS;
  14. var LIST_TARGETS;
  15. var TEXT_TEXT;
  16. var TEXT_TITLE;
  17. var TEXT_AKEY;
  18. var TEXT_TABIX;
  19. var DOC_TARGETS = new Array(); // Targets gathered from document. 
  20.  
  21. //---------------     API FUNCTIONS    ---------------
  22.  
  23. function isDOMRequired() { 
  24.     // Return false, indicating that this object is available in code view.
  25.     return false;
  26. }
  27.  
  28. function getNamedAnchors(){
  29.     var dom = dw.getDocumentDOM();
  30.     var allAnchors = dom.getElementsByTagName("A");
  31.     var anchorName;
  32.     for (var i=0; i < allAnchors.length; i++){
  33.         if (allAnchors[i]){
  34.             anchorName = allAnchors[i].getAttribute("NAME");
  35.             if (anchorName){
  36.                 LIST_LINKS.append("#" + anchorName,"#" + anchorName);
  37.             }
  38.         }else{
  39.             break;
  40.         }
  41.     }
  42. }
  43.  
  44. function getTargets(){
  45.     var dom = dw.getDocumentDOM();
  46.     // If document is within frameset, add frame names
  47.     // to target list
  48.     var frameNames = dom.getFrameNames();
  49.     for (var i=0; i < frameNames.length; i++){
  50.       LIST_TARGETS.append(frameNames[i],frameNames[i]);
  51.     }
  52.       
  53.     // Check document for additional targets
  54.   var links = dom.getElementsByTagName('A');
  55.   for (var q=0; q < links.length; q++){
  56.       if (links[q]){
  57.             if (links[q].getAttribute("target")){
  58.             add = true;
  59.           for (var y=0; y < DOC_TARGETS.length; y++){
  60.               if (DOC_TARGETS[y] == links[q].getAttribute("target")){
  61.                 add = false;
  62.               break;
  63.             }
  64.           }
  65.           if (add){
  66.             DOC_TARGETS.push(links[q].getAttribute("target"));
  67.           }
  68.             }
  69.         }else{
  70.             break;
  71.         }
  72.     }
  73.           
  74.   var allTargets = LIST_TARGETS.getValue('all');
  75.   for (var p=0; p < DOC_TARGETS.length; p++){
  76.     var addTarget = true;
  77.     for (var x=0; x < allTargets.length; x++){
  78.       if (allTargets[x] == DOC_TARGETS[p]){
  79.         addTarget = false;
  80.         break;
  81.       }
  82.     }
  83.     if (addTarget){
  84.       LIST_TARGETS.append(DOC_TARGETS[p],DOC_TARGETS[p]);
  85.     }
  86.   }
  87.     // set selectedIndex to edit field
  88.     LIST_TARGETS.setIndex(-1);
  89. }
  90.  
  91. function objectTag(){
  92.     var dom = dw.getDocumentDOM();
  93.   var linkStr = '<a href=';
  94.   if (LIST_LINKS && LIST_LINKS.get()  != ""){
  95.       linkStr += '"' + LIST_LINKS.get() + '"';
  96.   }else{
  97.     linkStr += '"#"';
  98.   }
  99.     if (TEXT_TABIX && TEXT_TABIX.value != ""){
  100.         linkStr += ' tabindex="' + TEXT_TABIX.value + '"';
  101.     }
  102.     if (TEXT_TITLE && TEXT_TITLE.value != ""){
  103.         linkStr += ' title="' + TEXT_TITLE.value + '"';
  104.     }
  105.     if (TEXT_AKEY && TEXT_AKEY.value != ""){
  106.         linkStr += ' accesskey="' + TEXT_AKEY.value + '"';
  107.     }
  108.     if (LIST_TARGETS && LIST_TARGETS.get() != ""){
  109.         linkStr += ' target="' + LIST_TARGETS.get() + '"';
  110.     }
  111.   if (TEXT_TEXT && TEXT_TEXT.value != ""){
  112.       linkStr += '>' + TEXT_TEXT.value + '</a>';
  113.   }else if (LIST_LINKS && LIST_LINKS.get()  != ""){
  114.     linkStr += '>' + LIST_LINKS.get() + '</a>';
  115.   }else{
  116.     linkStr += '>#</a>';
  117.   }
  118.       
  119.     if (dw.getFocus() == 'html' || dw.getFocus() == 'textView'){
  120.         var range = dom.source.getSelection();
  121.         dom.source.replaceRange(range[0],range[1],linkStr);
  122.     }else if ((dom.getSelection()[0] != dom.getSelection()[1]) && isCurSelectionTextOnly(dom)){
  123.     dom.insertHTML(linkStr,true);  
  124.   }else{
  125.         dom.insertHTML(linkStr,false);
  126.     }
  127.     
  128.     return;
  129. }
  130.  
  131. //---------------    LOCAL FUNCTIONS   ---------------
  132. function initUI() {
  133.     var dom = dw.getDocumentDOM();
  134.     LIST_LINKS = new ListControl('linkPath');
  135.     getNamedAnchors();
  136.   LIST_LINKS.set("",-1);
  137.     
  138.     LIST_TARGETS = new ListControl('linkTarget');
  139.     // Initialize target list
  140.     LIST_TARGETS.setAll(DEFAULT_TARGETS,DEFAULT_TARGETS);
  141.     // Add targets found in current document and framset
  142.     getTargets();
  143.   LIST_TARGETS.set("",-1);
  144.  
  145.     
  146.     TEXT_TEXT = document.theForm.linkText;
  147.     TEXT_TITLE = document.theForm.linkTitle;
  148.     TEXT_AKEY = document.theForm.accessKey;
  149.     TEXT_TABIX = document.theForm.tabIndex;
  150.     
  151.     
  152.     // If we're in code view, automatically populate the
  153.     // Text field with the selected text, and the link field
  154.     // with the selected text if it appears to be a link.
  155.     if (dw.getFocus() == 'html' || dw.getFocus() == 'textView'){
  156.         // populate Text field with selection even if it includes
  157.         // tags
  158.         var theSel = dom.source.getSelection();
  159.         var theText = dom.source.getText(theSel[0],theSel[1]);
  160.         TEXT_TEXT.value = theText;
  161.         
  162.         // populate Link field
  163.         LIST_LINKS.set(getLinkText(theText),-1);
  164.         LIST_LINKS.setValue(getLinkText(theText),-1);
  165.     }
  166.   else{
  167.     if (isCurSelectionTextOnly(dom)) {
  168.       var curSel = dom.getSelection();
  169.       var selText = dom.documentElement.outerHTML.slice(curSel[0],curSel[1]);
  170.       if (curSel[0] != curSel[1]){
  171.         // replace carriage returns (and the space on either side of any carriage returns, 
  172.         // if one exists) with a single space.
  173.         selText = selText.replace(/\s*[\n\r]+\s*/g, ' ');
  174.         TEXT_TEXT.value = dwscripts.entityNameDecode(selText);
  175.             LIST_LINKS.set(getLinkText(selText),-1);
  176.             LIST_LINKS.setValue(getLinkText(selText),-1);
  177.       }
  178.     }
  179.   }
  180.     
  181.     TEXT_TEXT.focus(); // give focus to list
  182. }
  183.  
  184. function getLinkText(theText){
  185.     var linkText = "";
  186.     for (var i=0; i < SCHEMES.length; i++){
  187.         if (theText.indexOf(SCHEMES[i]) == 0){
  188.             linkText = theText;
  189.             break;
  190.         }
  191.     }
  192.     if (linkText == ""){
  193.         if (theText.toLowerCase().indexOf('www.') == 0){
  194.             linkText = "http://" + theText;
  195.         }
  196.     }
  197.     return linkText;
  198. }
  199.  
  200. // Description: Determines if the current selection is contained within a text node.
  201. // Parameters:  DOM - checked for valid, returns false if no DOM.
  202. function isCurSelectionTextOnly(curDOM) {
  203.   var rtnBool = false;
  204.   if (curDOM != null) {
  205.     var curNode = curDOM.getSelectedNode();
  206.     if (curNode.nodeType == Node.TEXT_NODE) { // Return true if we are a text node.
  207.       rtnBool = true;
  208.     } else { // Return true if the selection contains a single text node.
  209.       if (curNode.hasChildNodes() && curNode.childNodes[0].nodeType == Node.TEXT_NODE) {
  210.         var curSel = curDOM.getSelection();
  211.         var nodeOffset = dw.nodeToOffsets(curNode.childNodes[0]);
  212.         if  ((nodeOffset[0] <= curSel[0]) && (curSel[1] <= nodeOffset[1])) {
  213.           rtnBool = true;
  214.   } } } }
  215.   return rtnBool;
  216. }
  217.  
  218.